package sort;
/**
 * 测试不同排序方法的耗时情况
 */
public class TestSort {
    public static void main(String[] args) {
        int n = 50000;
        int[] arr = SortHelper.generateRandomArray(n, 0, Integer.MAX_VALUE);
        int[] copy1 = SortHelper.arrCopy(arr);
        int[] copy2 = SortHelper.arrCopy(arr);
        int[] copy3 = SortHelper.arrCopy(arr);
        int[] copy4 = SortHelper.arrCopy(arr);
        int[] copy5 = SortHelper.arrCopy(arr);
        int[] copy6 = SortHelper.arrCopy(arr);
        int[] copy7 = SortHelper.arrCopy(arr);
        int[] copy8 = SortHelper.arrCopy(arr);
        int[] copy9 = SortHelper.arrCopy(arr);
        int[] copy10 = SortHelper.arrCopy(arr);

        // 利用SortHelper中的反射方法测试排序
        System.out.println("n = " + n);
        /** 冒泡排序法 **/
        SortHelper.testSort("bubbleSort", arr);
        /** 选择排序法 **/
        SortHelper.testSort("selectionSort", copy1);
        SortHelper.testSort("selectionSortOP", copy2);
        /** 插入排序法 **/
        SortHelper.testSort("insertionSort", copy3);
        SortHelper.testSort("insertionSortBS", copy4);
        /** 希尔排序 **/
        SortHelper.testSort("shellSort", copy5);
        /** 堆排序 **/
        SortHelper.testSort("heapSort", copy6);
        /** 归并排序 **/
        SortHelper.testSort("mergeSort", copy7);
        SortHelper.testSort("mergeSortNonRecursion", copy8);
        /** 快速排序 **/
        SortHelper.testSort("quickSort", copy9);
        SortHelper.testSort("quickSortNonRecursion", copy10);


        System.out.println("-----------------------------------");
        int n2 = 10000000;
        int[] arr2 = SortHelper.generateRandomArray(n2, 0, Integer.MAX_VALUE);
        int[] copy11 = SortHelper.arrCopy(arr2);
        int[] copy12 = SortHelper.arrCopy(arr2);
        int[] copy13 = SortHelper.arrCopy(arr2);
        int[] copy14 = SortHelper.arrCopy(arr2);
        System.out.println("n = " + n2);
        /** 堆排序 **/
        SortHelper.testSort("heapSort", arr2);
        /** 归并排序 **/
        SortHelper.testSort("mergeSort", copy11);
        /** 快速排序 **/
        SortHelper.testSort("quickSort", copy12);
        SortHelper.testSort("quickSort2", copy13);
        SortHelper.testSort("quickSort3", copy14);


        System.out.println("-----------------------------------");
        System.out.println("当出现大量重复元素时");
        int n3 = 1000000;
        int[] arr3 = SortHelper.generateRandomArray(n3, 0, 100);
        int[] copy20 = SortHelper.arrCopy(arr3);
        int[] copy21 = SortHelper.arrCopy(arr3);
        int[] copy22 = SortHelper.arrCopy(arr3);
        int[] copy23 = SortHelper.arrCopy(arr3);
        System.out.println("n = " + n3 + " ,且0 <= arr[i] <= 100");
        SortHelper.testSort("heapSort", arr3);
        SortHelper.testSort("mergeSort", copy20);
        SortHelper.testSort("quickSort", copy21);
        SortHelper.testSort("quickSort2", copy22);
        SortHelper.testSort("quickSort3", copy23);
    }
}
